Generally, a computer network (“network”) is two or more autonomous computers coupled together for the purposes of sharing resources and information. For instance, a peripheral device, such as a printer, may be shared among computers on a network. A network provides a means for physical and logical devices to communicate with each other. Generally, the term “physical device” refers to hardware, while “logical device” refers to software. For example, a printer is a physical device, while software for use with the printer is a logical device. Every physical device coupled to a network has a network address, which is an identifier used by other devices for communicating with it. Similarly, each logical device on a network has a network path that is used to identify it. Many networks use the TCP/IP protocols (Transmission Control Protocol/Internet Protocol), and network addresses in such networks are referred to as IP addresses.
When a user running an application (“client”), such as a word processor, on a client computer wishes to print something, the user selects a logical printer, which may be one of several in a list, and issues a command to print the document. In response, the application program creates a “print job” which it sends to the local logical printer. A “logical printer” is software that accepts print jobs and performs spooling functions so that the application need not wait until all of the activities associated with printing are completed. The logical printer is a software module that may be part of the operating system (“OS”), but which may also be a separate proprietary software component. A logical printer is also referred to as a print server, a print queue, or a print spooler (“spool” being an acronym for simultaneous peripheral operations on-line). The logical printer typically stores the print job in the order it was received in a buffer along with any other pending print jobs (that is, it “spools” the print job). When the physical printer is ready to accept the print job, the logical printer reads the print job from the buffer and sends it to the physical printer (that is, it “de-spools” the print job). The physical printer that the print job is sent to may be a locally connected (e.g., parallel port, USB) printer or a network-connected printer. The network-connected printer may be accessed either as a locally installed printer (“logical local printer”) or as a network-installed printer (“logical network printer”). In the former case, the printer is unmanaged and each user can establish a connection to the printer in an ad-hoc manner. In the latter case, the printer is managed at a centralized location (i.e., print server), and each user must instead establish a connection with the print server.
A logical network printer runs on a server computer coupled to the network and allows computers on the network to send print jobs without having to wait for the physical network printer. Because the physical network printer is a shared device that can be accessed by many computers, there is a need to coordinate and control access to it. This management function is provided by the logical network printer. In addition, the logical network printer commonly provides a few limited additional functions, such as the ability to cancel a print job or change the order of print jobs.
When a print job is sent to a locally installed printer connected to the network, the printing operation is referred to as peer-to-peer printing and the client computer must have the network address of the network-connected printer. If the OS in the client computer is a Microsoft® Windows OS, an OS software module known as a port monitor must have a means to obtain the network address of the network-connected printer. The port monitor uses the network address of the network-connected printer to send print jobs directly to it. On the other hand, when a print job is sent to a network-installed printer connected to the network, the printing operation is referred to as network printing, and the client side port monitor must have the network path of the logical network printer, and the server side port monitor associated with the logical network printer must have a means to obtain the network address of the network-connected printer. The client side port monitor uses the network path of the logical network printer to send print jobs indirectly to it.
Physical printers have evolved so that they are now capable of performing more than just printing. For instance, a multi-function peripheral or “MFP” is capable not only of printing, but also of scanning, copying, faxing, and document management operations. A print job can be sent from a client application on a client computer to an MFP in the same way it is sent to a physical printer, that is, as a peer-to-peer or network printing operation. However, a client application may not send other types of jobs or communications (e.g., device management protocols) through the logical network printer as if the other job were a network print job. The reason is that the logical network printer is simply not designed to accommodate the protocols for these types of jobs or communications. Because the logical printer is typically part of the OS, generally, only the provider of the OS is able to re-design the logical printer to accommodate additional protocols, and the provider of the widely used Microsoft Windows OS has only provided support for print and fax protocols. Therefore, a scan request or device management protocol (e.g., SNMP) must be sent directly from a client application to the physical MFP. In other words, for these operations, the client application must communicate with the MFP in a peer-to-peer mode.
As mentioned, in order for a client computer to communicate directly with the MFP it must have the network address of the MFP. If the client computer is configured to send print jobs to the MFP as a peer-to-peer printing operation, the port monitor has the means to obtain the network address of the MFP. The client application that needs to directly communicate with the MFP may be able to use an existing API (Application Program Interface) call to obtain the network address of the MFP from the port monitor, such as a Spooler API. If the client computer is configured to send print jobs to the MFP as a network printing operation, the logical network printer has the network address of the MFP. In this case, the client application that needs to directly communicate with the MFP may be able to use an existing RPC (Remote Procedure Call) to obtain the network address of the MFP from the logical network printer.
However, these methods for obtaining the network address of the MFP are not always available. For example, if the software module that reads the print job from the buffer and sends it to the physical printer (the module that performs the de-spooling function) is not part of the OS, but instead is a separate proprietary module, the network address of the MFP may not be obtainable. For example, Windows cannot use an existing API (Application Program Interface) call to obtain the network address of the MFP from the port monitor since the proprietary module, not the port monitor, is performing the network interface functions. In other cases, the port monitor itself may be the proprietary module which may or may not support a means to obtain the network address through an API call. As another example, if the OS in the client computer is Microsoft® Windows 95, Windows 98, or Windows Me, the network address of the MFP again cannot be obtained because these operating systems do not support the use of an RPC to obtain the network address of the MFP from the logical network printer.
Accordingly, there is a need for a method and apparatus for discovering the network address of a physical peripheral device coupled to a network.